// category.js
// 导入请求工具
const { get, post } = require('../../utils/request');
const app = getApp();

Page({
  data: {
    categories: [], // 一级分类列表
    currentCategoryId: null, // 当前选中的分类ID
    goodsList: [], // 商品列表
    sortType: 'default', // 排序类型：default, price_asc, price_desc, sales
    hasMore: true, // 是否有更多数据
    page: 1, // 当前页码
    pageSize: 10 // 每页数量
  },

  onLoad: function(options) {
    // 获取URL参数中的分类ID
    const categoryId = options.category_id || null;
    // 加载分类数据
    this.loadCategories(categoryId);
  },

  onShow: function() {
    // 页面显示时，更新购物车数量
    this.updateCartCount();
  },

  /**
   * 加载分类数据
   */
  loadCategories: function(initialCategoryId) {
    get('/api/categories/')
      .then(res => {
        if (res && res.length > 0) {
          // 设置当前分类ID
          const currentCategoryId = initialCategoryId || res[0].id;
          this.setData({
            categories: res,
            currentCategoryId: currentCategoryId,
            goodsList: [], // 清空商品列表
            page: 1, // 重置页码
            hasMore: true // 重置是否有更多数据
          });
          // 加载商品数据
          this.loadGoods(currentCategoryId);
        }
      })
      .catch(err => {
        console.error('请求分类数据失败', err);
        wx.showToast({
          title: '加载分类失败',
          icon: 'none'
        });
      });
  },

  /**
   * 加载商品数据
   */
  loadGoods: function(categoryId, sort = this.data.sortType, append = false) {
    // 显示加载中
    wx.showLoading({
      title: '加载中',
    });

    // 构建请求参数
    const params = {
      category_id: categoryId,
      page: this.data.page,
      pageSize: this.data.pageSize
    };
    
    // 添加排序参数
    if (sort !== 'default') {
      params.sort = sort;
    }

    get('/api/goods/', params)
      .then(res => {
        wx.hideLoading();
        
        let goodsList = this.data.goodsList;
        if (append) {
          // 追加数据
          goodsList = [...goodsList, ...res.results];
        } else {
          // 替换数据
          goodsList = res.results;
        }

        this.setData({
          goodsList: goodsList,
          hasMore: res.results.length === this.data.pageSize
        });
      })
      .catch(err => {
        wx.hideLoading();
        console.error('请求商品数据失败', err);
        wx.showToast({
          title: '加载商品失败',
          icon: 'none'
        });
      });
  },

  /**
   * 切换分类
   */
  switchCategory: function(e) {
    const categoryId = e.currentTarget.dataset.id;
    if (categoryId === this.data.currentCategoryId) {
      return;
    }

    this.setData({
      currentCategoryId: categoryId,
      page: 1, // 重置页码
      hasMore: true, // 重置是否有更多数据
      sortType: 'default' // 重置排序类型
    });

    // 加载新分类下的商品
    this.loadGoods(categoryId);
  },

  /**
   * 默认排序
   */
  sortByDefault: function() {
    this.setData({
      sortType: 'default',
      page: 1,
      hasMore: true
    });
    this.loadGoods(this.data.currentCategoryId);
  },

  /**
   * 按价格升序排序
   */
  sortByPriceAsc: function() {
    this.setData({
      sortType: 'price_asc',
      page: 1,
      hasMore: true
    });
    this.loadGoods(this.data.currentCategoryId, 'price_asc');
  },

  /**
   * 按价格降序排序
   */
  sortByPriceDesc: function() {
    this.setData({
      sortType: 'price_desc',
      page: 1,
      hasMore: true
    });
    this.loadGoods(this.data.currentCategoryId, 'price_desc');
  },

  /**
   * 按销量排序
   */
  sortBySales: function() {
    this.setData({
      sortType: 'sales',
      page: 1,
      hasMore: true
    });
    this.loadGoods(this.data.currentCategoryId, 'sales');
  },

  /**
   * 跳转到搜索页
   */
  toSearch: function() {
    wx.navigateTo({
      url: '/pages/search/search'
    });
  },

  /**
   * 跳转到商品详情页
   */
  toGoodsDetail: function(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/goods/detail?id=${id}`
    });
  },

  /**
   * 添加商品到购物车
   */
  addToCart: function(e) {
    const goodsId = e.currentTarget.dataset.id;
    
    // 阻止冒泡，避免触发商品详情跳转
    const { currentTarget, target } = e;
    if (currentTarget === target) {
      return;
    }

    // 显示加载中
    wx.showLoading({
      title: '添加中',
    });

    // 调用添加购物车API
    post('/api/cart/', {
      goods_id: goodsId,
      num: 1
    })
      .then(res => {
        wx.hideLoading();
        wx.showToast({
          title: '添加成功',
          icon: 'success'
        });
        
        // 更新购物车数量
        this.updateCartCount();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('添加购物车失败', err);
        wx.showToast({
          title: '添加失败',
          icon: 'none'
        });
      });
  },

  /**
   * 更新购物车数量
   */
  updateCartCount: function() {
    get('/api/cart/count/')
      .then(res => {
        const count = res.count || 0;
        app.globalData.cartCount = count;
        // 可以在这里发送全局通知，让tabBar更新购物车图标
      })
      .catch(err => {
        console.error('获取购物车数量失败', err);
      });
  },

  /**
   * 监听滚动
   */
  onScroll: function(e) {
    // 当滚动到底部时，加载更多数据
    const { scrollTop, scrollHeight, windowHeight } = e.detail;
    if (scrollHeight - scrollTop - windowHeight < 100 && this.data.hasMore) {
      this.setData({
        page: this.data.page + 1
      });
      this.loadGoods(this.data.currentCategoryId, this.data.sortType, true);
    }
  }
});